/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pl.tewi.annotations.processors;

import java.util.ArrayList;
import pl.tewi.contexts.ApplicationServerContext;
import pl.tewi.exceptions.AnnotationProcessingException;
import pl.tewi.exceptions.GeneralFrameworkException;

/**
 *
 * @author Marcin Kwapisz
 */
public abstract class AbstractAnnotationProcessor implements AnnotationProcessor {

    protected final ArrayList<AnnotationProcessor> procesors = new ArrayList<AnnotationProcessor>();

    /**
     * metoda przetwarza wszystkie adnotacjie znajdujące się na klasie
     * przekazanej jako parametr
     *
     * @param klass klasa opisana adnotacją typu {@link RunWith}({@link JeeSuite})
     * @param appServerContext kontekst serwera aplikacji. Jeżeli jest null to
     * zostanie utworzony nowy
     * @return utworzony kontekst serwera aplikacji
     * @throws AnnotationProcessingException błąd przetwarzania adnotacji.
     * Wyjątek może być typu szczegółowego w zalezności od procesora adnotacji
     * @throws GeneralFrameworkException
     */
    @Override
    public ApplicationServerContext processAnnotations(final Class<?> klass, ApplicationServerContext appServerContext) throws AnnotationProcessingException, GeneralFrameworkException {
        if (appServerContext == null) {
            appServerContext = new ApplicationServerContext();
        }
        //przetwórz wszystkie adnotacje
        for (AnnotationProcessor processor : procesors) {
            appServerContext = processor.processAnnotations(klass, appServerContext);
        }
        return appServerContext;
    }
}
